package com.sinoglobal.wallet.view.refresh;

import java.util.Date;

import android.os.Handler;
import android.view.View;
import android.widget.ListView;

import com.sinoglobal.wallet.view.refresh.loadmore.LoadMoreContainerBase;
import com.sinoglobal.wallet.view.refresh.loadmore.LoadMoreHandler;
import com.sinoglobal.wallet.view.refresh.refresh.PtrClassicFrameLayout;
import com.sinoglobal.wallet.view.refresh.refresh.PtrHandler;
import com.sinoglobal.wallet.view.refresh.refresh.PtrUIHandler;


/**
 * @author lgy
 * @createdate 2015-6-12 下午12:46:44
 * @Description: 刷新加载更多的控制器 需要在查找到控件后调用
 */
public class RefreshManager {
    private PtrClassicFrameLayout mPtrFrameLayout; // 刷新控件,
    // 这个控件是个显示刷新时间的子控件,如果用其他头布局的话
    // 可以使用PtrFrameLayout控件或者注释掉第119行代码
    private LoadMoreContainerBase loadMoreContainer; // 加载更多
    private PtrHandler ptrHandler; // 刷新监听
    private LoadMoreHandler loadMoreHandler; // 加载更多监听

    /**
     * @param mPtrFrameLayout   刷新控件
     * @param loadMoreContainer 加载更多控件
     * @param ptrHandler        刷新监听
     * @param loadMoreHandler   加载更多监听
     * @param listView   列表控件, 隐藏脚布局的线使用
     *
     * @author lgy
     * @createdate 2015-6-12 下午12:02:35
     * @Description: 管理器初始化
     */
    public RefreshManager(PtrClassicFrameLayout mPtrFrameLayout, LoadMoreContainerBase loadMoreContainer, PtrHandler ptrHandler, LoadMoreHandler loadMoreHandler, ListView listView) {
        super();
        this.mPtrFrameLayout = mPtrFrameLayout;
        this.ptrHandler = ptrHandler;
        this.loadMoreContainer = loadMoreContainer;
        this.loadMoreHandler = loadMoreHandler;
        init();
        listView.setFooterDividersEnabled(false);
    }

    /**
     * @author lgy
     * @createdate 2015-6-12 下午12:45:36
     * @Description: 初始化
     */
    public void init() {
        mPtrFrameLayout.setLoadingMinTime(1000);
        mPtrFrameLayout.setPtrHandler(ptrHandler);
        loadMoreContainer.setLoadMoreHandler(loadMoreHandler);
        loadMoreContainer.useDefaultFooter();
    }

    /**
     * @param autoHead   true 自动刷新 false 不自动
     * @param autoFooter true 自动加载更多 false 不自动
     *
     * @author lgy
     * @createdate 2015-6-12 下午2:14:39
     * @Description: 设置自动加载, 如果需要设置自动刷新, 请在加载数据前调用
     */
    public void setAuto(boolean autoHead, boolean autoFooter) {
        if (autoHead) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    mPtrFrameLayout.autoRefresh();
                }
            }, 100);
        }
        loadMoreContainer.setAutoLoadMore(autoFooter);

    }

    /**
     * @param header
     *
     * @author lgy
     * @createdate 2015-6-12 下午2:14:22
     * @Description: 设置头布局 FIXME 待完善, 需要判断header是否实现了PtrUIHandler接口
     */
    public void setHeader(View header) {
        mPtrFrameLayout.setHeaderView(header);
        mPtrFrameLayout.addPtrUIHandler((PtrUIHandler) header);

        // 如果使用MaterialHeader 需要调用它的setPtrFrameLayout(mPtrFrameLayout)
    }

    /**
     * @param emptyResult 加载的数据是否为空
     * @param hasMore     是否有下一页
     *
     * @author lgy
     * @createdate 2015-6-12 下午12:02:35
     * @Description: (用一句话描述该方法做什么) 异步加载数据完毕后调用
     */
    public void loadComplete(boolean emptyResult, boolean hasMore) {
        mPtrFrameLayout.refreshComplete();
        loadMoreContainer.loadMoreFinish(emptyResult, hasMore);
        // TODO 如果换更换头布局的话 这句可以不要
        mPtrFrameLayout.setLastUpdateTimeRelateObject(new Date());
    }

    /**
     * @param errorCode    错误码, 框架中可以根据错误码进行提示Message ,需要自己完善
     * @param errorMessage 提示的错误信息
     *
     * @author lgy
     * @createdate 2015-6-12 下午12:44:14
     * @Description: 加载失败
     */
    public void loadError(int errorCode, String errorMessage) {
        mPtrFrameLayout.refreshComplete();
        loadMoreContainer.loadMoreError(errorCode, errorMessage);
    }
}
